//给你一个二进制数组 nums ，你需要从中删掉一个元素。 
//
// 请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。 
//
// 如果不存在这样的子数组，请返回 0 。 
//
// 
//
// 提示 1： 
//
// 
//输入：nums = [1,1,0,1]
//输出：3
//解释：删掉位置 2 的数后，[1,1,1] 包含 3 个 1 。 
//
// 示例 2： 
//
// 
//输入：nums = [0,1,1,1,0,1,1,0,1]
//输出：5
//解释：删掉位置 4 的数字后，[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。 
//
// 示例 3： 
//
// 
//输入：nums = [1,1,1]
//输出：2
//解释：你必须要删除一个元素。 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 10⁵ 
// nums[i] 要么是 0 要么是 1 。 
// 
//
// Related Topics 数组 动态规划 滑动窗口 👍 157 👎 0

package leetcode.editor.cn;
//java:删掉一个元素以后全为 1 的最长子数组
public class Q1493LongestSubarrayOf1sAfterDeletingOneElement {
    public static void main(String[] args){
        Solution solution = new Q1493LongestSubarrayOf1sAfterDeletingOneElement().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int longestSubarray(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) {
            return 0;
        }
        // 是否存在0的标志;    左指针；    0的个数
        int flag = 1, left = 0, count = 0, res = 0;
        for (int right = 0; right < nums.length; right++) {
            if (nums[right] == 0) {
                count++;
                // 判定是否有0，没有0也要去掉一个
                flag = 0;
            }
            // 超过一个0后移动左指针，移动到区间内的0之后
            while (count > 1) {
                if (nums[left] == 0) {
                    count--;
                }
                left++;
            }
            // right -left ,没有+1，因为要去掉一个0
            res = Math.max(res, right - left);
        }
        return flag == 1 ? nums.length - 1 : res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}